<script>
    // 解构赋值
    // 这是一个赋值运算
    // 按照一定的模式去赋值
    // 数组模式：数组解构赋值  对象模式：对象解构赋值  （函数参数解构赋值）
    // let 模式=值  （模式：对应的结构+变量）



    // 数组解构赋值，按照一定的模式去得到数组中的数据
    // 语法：let [变量1,变量2,,,]=数组数据
    // 默认值：let [变量1=默认值1,变量2=默认值1,,,]=数组数据，当解析出来的值为undefined的时候，默认值会生效

    let arr = ["a", "b", "c", "d"]

    // es5简单等号赋值运算，通过下标去拿取数组中的值
    // let a=arr[0]
    // let b=arr[1]
    // let c=arr[2]
    // let d=arr[3]
    // let e=arr[4]
    // let f=arr[5]
    // console.log(a,b,c,d);//a b c d undefined undefined


    // // es6数组解构赋值
    // // 1、完全解构：变量的个数和数据的个数一样
    // let [a,b,c,d]=arr
    // console.log(a,b,c,d);//a b c d


    ///2、不完全解构：变量的个数比数据的个数少（有一部分数据没有被我们拿取出来）
    // let [a,b,c]=arr
    // console.log(a,b,c);//a b c

    // let [b,d]=arr
    // console.log(b,d);//a b  数组是有顺序的，所以取值也是按照顺序取的

    // //不完全解构的情况下的缺省值
    // let [a,b,c,]=arr
    // let [a,b,c]=arr //尾部的缺省值的位置是可以省略不写的
    // let [,b,,d]=arr
    // let [a,,,d]=arr
    // console.log(a,d);//a d



    // // // 3、解构失败：变量的个数多于数据的个数（或者说位置匹配不上）值为undefined
    // // let  [a,b,c,d,e,f]=arr
    // // console.log(a,b,c,d,e,f);//a b c d undefined undefined

    // let  [,,,,e,f]=arr
    // console.log(e,f);//undefined undefined



    // 4、默认值：当解构出来的数据是undefined的时候，默认值生效
    // let numarr=[1,2,3,4,5]
    // let [a,b,c,d,e,f]=numarr
    // console.log(a+b+c+d+e+f);//NaN

    // let numarr=[1,2,3,4,5]
    // let [a,b,c,d,e,f=0]=numarr //我们希望f没有解析出值的时候，f会有一个默认的值
    // console.log(a+b+c+d+e+f);//15

    // // let arr=["a","b","c","d"]
    // let [a,b,c,d,e="",f=""]=arr
    // console.log(a+b+c+d+e+f);//abcdundefinedundefined


    let numarr = [1, 2, 3, 4, null]
    let [a, b, c, d, e = 5] = numarr;
    console.log(a, b, c, d, e);//1 2 3 4 null
    console.log(a + b + c + d + e);//10






    // 数据交换
    let i = 1;
    let j = 2;

    // let temp=i;
    // i=j;
    // j=temp;
    // console.log(i,j);//2 1

    [i,j]=[j,i] //[i,j]=[2,1]
    console.log(i,j);//2 1



</script>